package com.codefish.codefishseckill.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.codefish.codefishseckill.entity.Goods;
import com.codefish.codefishseckill.entity.SecKillGoods;
import com.codefish.codefishseckill.entity.User;

/**
 * <p>
 * 秒杀商品表 服务类
 * </p>
 *
 * @author codefish
 * @since 2022-07-07
 */
public interface SecKillGoodsService extends IService<SecKillGoods> {

    String SECKILL_SUCCESS_PREFIX = "seckill:goods:successful:";
    String SECKILL_GOODS_PREFIX = "seckill:goods:";
    String SECKILL_GOODS_STOCK_PREFIX = "seckill:goods:stock:";
    String SECKILL_API_REAL_PATH_PREFIX = "seckill:api:realpath:";

    /**
     * 更新秒杀商品的库存
     *
     * @param goodsId 商品编号
     * @return 处理结果
     */
    @Deprecated
    boolean updateStock(Long goodsId, Integer newStock);

    /**
     * 更新秒杀商品库存第一版
     *
     * @param goodsId   商品编号
     * @param downCount 要减去的库存数
     * @return 处理结果
     */
    boolean updateStockV1(Long goodsId, Integer downCount);

    /**
     * 更新秒杀商品库存第二版(where条件包含库存>0检查)
     *
     * @param goodsId   商品编号
     * @param downCount 要减去的库存数
     * @return 处理结果
     */
    boolean updateStockV2(Long goodsId, Integer downCount);

    /**
     * 按照商品编号获取商品信息
     *
     * @param goodsId 商品编号
     * @return
     */
    SecKillGoods getByGoodsId(Long goodsId);

    /**
     * 按goodsId更新
     *
     * @param goods 商品编号
     * @return 更新结果
     */
    boolean updateByGoodsId(SecKillGoods goods);

    /**
     * 记录秒杀成功的用户，如果已存在，则返回true
     *
     * @param goodsId 商品id
     * @param userId  用户id
     * @return 是否重复秒杀，true表示是，false表示否
     */
    boolean recordKillSuccessUser(Long goodsId, Long userId);

    /**
     * 获取动态的秒杀接口变量
     * @param user 用户信息
     * @param goodsId 商品信息
     * @return 动态地址
     */
    String getPath(User user, Long goodsId);

    /**
     * 校验path是否正确
     *
     * @param path path
     * @param user 用户
     * @param goodsId 商品编号
     * @return path是否正确
     */
    boolean checkPath(String path,User user,Long goodsId);


}
